#include<bits/stdc++.h>
using namespace std;

#define ll long long
#define pii pair<ll, ll>

const ll INF = 1e18;

pii a, b; // Takahashi 和 Aoki 的初始位置
ll N, M, L; // 总步数，Takahashi的动作长度，Aoki的动作长度
vector<pair<char, ll>> ap, bp; // 每个人的动作和重复次数
ll ans = 0; // 最终的重合次数

// 方向映射
int at(char c) {
    if (c == 'U') return 0; // 上
    if (c == 'R') return 1; // 右
    if (c == 'D') return 2; // 下
    return 3; // 左
}

// 更新位置的函数
void move(pii& pos, int dir) {
    if (dir == 0) pos.first--; // 上
    if (dir == 1) pos.second++; // 右
    if (dir == 2) pos.first++; // 下
    if (dir == 3) pos.second--; // 左
}

// 处理每个操作段
void process_step(pii& a, pii& b, int dir1, int dir2, ll steps) {
    // 计算两个人在这段时间内是否重合
    for (int i = 0; i < steps; i++) {
        move(a, dir1);
        move(b, dir2);
        if (a == b) ans++;
    }
}

// 主解题函数
void solve() {
    cin >> a.first >> a.second >> b.first >> b.second;
    cin >> N >> M >> L;

    // 读取Takahashi的动作
    for (int i = 0; i < M; i++) {
        char c; ll x;
        cin >> c >> x;
        ap.push_back({ c, x });
    }

    // 读取Aoki的动作
    for (int i = 0; i < L; i++) {
        char c; ll x;
        cin >> c >> x;
        bp.push_back({ c, x });
    }

    ll p1 = 0, p2 = 0; // 当前操作的指针

    while (p1 < M || p2 < L) {
        // 获取当前的动作和重复次数
        ll move_takahashi = (p1 < M) ? ap[p1].second : INF;
        ll move_aoki = (p2 < L) ? bp[p2].second : INF;
        ll steps = min(move_takahashi, move_aoki); // 本次可以同时进行的最大步数

        // 处理这段时间内的同步移动
        process_step(a, b, at(ap[p1].first), at(bp[p2].first), steps);

        // 更新指针，处理剩余的重复步数
        ap[p1].second -= steps;
        bp[p2].second -= steps;

        if (ap[p1].second == 0) p1++;
        if (bp[p2].second == 0) p2++;
    }

    cout << ans << endl; // 输出结果
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    solve();
    return 0;
}
